#pragma once
#include "burnpipe.h"


namespace burn {

class GElementSorter : public GElementObject {
public:
  /**
   * 当level不同的时候，level值小的element优先被init和destroy
   * 默认情况下， init和destroy顺序随机
   * @param a
   * @param b
   * @return
   */
  CBool operator()(GElementPtr a, GElementPtr b) const {
    return (a->level_ == b->level_) ? (a < b) : (a->level_ < b->level_);
  }

  CStatus run() override { CGRAPH_NO_SUPPORT }
};

using GSortedGElementPtrSet = std::set<GElementPtr, GElementSorter>;

} // namespace burn